[r7]: / trunk / json / json-pac / Data Types / JSONVAR / FB_Init / svnobj  Maximize  Restore  History

Download this file

46 lines (43 with data), 16.4 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
split the variable path into an array, and determine some object characteristics
TO DO:  objects and arrays should automatically close, as it is possible that this variable is the last one
========================================================================================================*)
//TO DO:  use SPLIT function to create an array first, then loop through the array
WHILE (StringIndex > 0) DO
	IF (NameStringPtr^[StringIndex] = ASCII.DOT) THEN
	//found a "." character
		VarNameBegin:= StringIndex + 1;
		
		//clear array string  TO DO:  IS THIS NECESSARY?
		Sysmem.SysMemSet(
			pDest:= ADR(_VarNameArray[VarNameIndex]), 
			udiValue:= 0, 
			udiCount:= GPL_JSON.MAX_NAME_SIZE
		);
	
		//copy string between VarNameBegin and VarNameEnd
		SysMem.SysMemCpy(
			pSrc:= ADR(NameStringPtr^[VarNameBegin]), 
			udiCount:= INT_TO_UDINT((VarNameEnd - VarNameBegin)+1)
		//remove leading _ from the name, if present
			_VarNameArray[VarNameIndex].Name:= RIGHT(STR:= _VarNameArray[VarNameIndex].Name, SIZE:= LEN(_VarNameArray[VarNameIndex].Name) - 1);
		END_IF
		startarraystr:= FIND(STR1:= _VarNameArray[VarNameIndex].Name, STR2:= '[');
		//highest variable name is always two less than the Application index	
			_ParentVar:= VarNameIndex - 2;
			EXIT;
		VarNameIndex:= VarNameIndex + 1;
//====================JSON OBJECT CHARACTERISTICS====================
//check for valid reference--will be invalid when FB_Init is run on the first instance of JSONVAR
		//if objects have shifted down, then i-offset will never point to PrevNameArray[1]
		//the previous variable might need an array closed
			IF (PrevNameArray[1].ArrayIndex > 0) THEN
			//end array
				PrevNameArray[1].EndArray:= TRUE;
			END_IF	
			PrevNameArray[prevvarlevelindex].EndObject:= TRUE;	//close previous object	
		END_IF	
		IF (_VarNameArray[varlevelindex].ArrayIndex = 1) AND (PrevNameArray[prevvarlevelindex].ArrayIndex = 0) THEN
		//new array
			_VarNameArray[varlevelindex].NewArray:= TRUE;				
			_VarNameArray[varlevelindex].NewObject:= TRUE;	//new object at this level	
	END_FOR
ELSE
  bInitRetains : 		BOOL; // TRUE: the retain variables are initialized (reset warm / reset cold)